home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / datasheets and manuals / Hardware / WHT / scsi / dsr_sources_2_2001 / status < prev    next >
Text File  |  2006-10-19  |  3KB  |  121 lines

  1. ************************************************************
  2. *                                                          *
  3. *  I/O Opcode 9 - STATUS                                   *
  4. *                                                          *
  5. *  This procedure will check the status of a file.  If it  *
  6. *  is open, it gets the information from the FDR in        *
  7. *  memory.  Otherwise, it has to call GETFDR to read it    *
  8. *  from disk.                                              *
  9. *                                                          *
  10. *  Register Usage:                                         *
  11. *     R1 - Points to FDR in memory                         *
  12. *     R2 - The status byte as we build it                  *
  13. *                                                          *
  14. ************************************************************
  15.  
  16. STAT0
  17.        ANDI R12,>FF00
  18.        AI   R12,24
  19.  
  20.        CLR  R2
  21.  
  22.        LDCR @B02,4
  23.        BLWP @IFO             See if file is open
  24.        JNE  STAT1
  25.  
  26. * The file is open - See if we're at EOF
  27. *
  28.        MOV  @62(R5),R3       Get current sector/record #
  29.        MOV  @54(R5),R4       Get pointer in buffer
  30.  
  31.        MOV  @4(R5),R1        Get address of FDR
  32.        LDCR @2(R5),4         Select bank with FDR
  33.  
  34.        SWPB R3
  35.        C    R3,@18(R1)
  36.        JNE  STAT12
  37.  
  38. * If the file is empty, we're at the end of file
  39.  
  40.        C    @ZERO,@18(R1)
  41.        JEQ  STAT10
  42.  
  43.        MOVB @12(R1),R0       Get file flags
  44.        ANDI R0,>8000         Check for variable records
  45.        JEQ  STAT10
  46.        LDCR @B02,4
  47.        LDCR @3(R5),4         Select bank with buffer
  48.        CB   *R4,@B255        Check for end of sector marker
  49.        JNE  STAT11
  50. STAT10 ORI  R2,>0100
  51. STAT11 LDCR @B02,4
  52.        LDCR @2(R5),4         Select bank with FDR
  53. STAT12
  54.        JMP  STAT3
  55.  
  56. STAT1  BL   @GETFDR
  57.        CI   R5,0
  58.        JNE  STAT2
  59.  
  60.        ORI  R2,>8000         File does not exist
  61.        JMP  STAT7
  62.  
  63. STAT2  LDCR @ZERO,4
  64.        MOV  R5,R1
  65.  
  66. STAT3
  67.  
  68. * Check to see if file is protected
  69.  
  70.        MOV  @12(R1),R0       Get file flags
  71.        COC  @PROBIT,R0       Check protection bit
  72.        JNE  STAT4
  73.  
  74.        ORI  R2,>4000
  75.  
  76. STAT4
  77.  
  78. * Check for DISPLAY or INTERNAL
  79.  
  80.        MOV  @12(R1),R0
  81.        ANDI R0,>0200
  82.        JEQ  STAT5
  83.  
  84.        ORI  R2,>1000
  85.  
  86. STAT5
  87.  
  88. * Check for program file
  89.  
  90.        MOV  @12(R1),R0
  91.        ANDI R0,>0100
  92.        JEQ  STAT6
  93.  
  94.        ORI  R2,>0800
  95.  
  96. STAT6
  97.  
  98. * Check for FIXED or VARIABLE
  99.  
  100.        MOV  @12(R1),R0
  101.        ANDI R0,>8000
  102.        JEQ  STAT7
  103.  
  104.        ORI  R2,>0400
  105.  
  106. STAT7
  107. * Now store the status in byte 8 of the caller's PAB
  108.  
  109.        LDCR @ZERO,4          Select RAM bank 0
  110.        MOV  @PABADR,R3
  111.        AI   R3,8
  112.        ORI  R3,>4000
  113.        SWPB R3
  114.        MOVB R3,@VDPWA
  115.        SWPB R3
  116.        MOVB R3,@VDPWA
  117.        NOP
  118.        MOVB R2,@VDPWD
  119.  
  120.        B    @DSRRT
  121.